Integer ارسال شده در April 4 اشتراک گذاری ارسال شده در April 4 In the name of God سلامممممممممممممممم می ارزم دمت تمامی دوستان و همراهان همیشگی امیدوارم حالتون خوب و حال دلتون بهتر باشه! امروز با یه موضوع جذابی در خدمت شما هستیم, موضوعی در رابطه با معماری های پردازنده های مرکزی و پردازنده های گرافیکی خب ببینید, شما وقتی لانچر آرساکیا گیم رو با نوت پد باز کنید, با همچین صحنه ای روبه رو خواهید شد (حالا من با نوت پد بازش نکردم :D): ما اصطلاحا به اینا میگیم کد ماشین دقت کنید دوستان, کد اسمبلی و اینا نه, کد ماشین دوستان اولین آفست (اصطلاحا به هرکدوم میگیم یه آفست, اینی که من میگم میشه آفست 0x00) که نوشته داخلش "4D 5A", این DOS Header هستش, یعنی این یه فایل اجرایی هستش بعدش نگاه کنید نوشته "90 00 03 00", این یک اشاره گر/پوینتر به امضای PE (نه خود امضای PE) هستش (File Ending ای که متعلق به ویندوز هستش) و حالا تا آخر اما خب این کدی که وجود داره اینجا, از یه کد اسمبلی تبدیل به این شده ببینید دوستان من کاری ندارم که توسعه دهنده ی لانچر آرساکیا با گولنگ نوشته, با سی, سی پلاس پلاس, سی شارپ, یا چمیدونم Rust, Dlang, Zig و... در نهایت, یه چیزی در مباحث بیلد گرفتن به اسم Assembler اینارو به اسمبلی تبدیل میکنه و از Assembly به کد ماشین یعنی در نهایت از گولنگش تا Zigش در نهایت میشن Assembly برای هر معماری حالا این لانچر آرساکیا تا جایی که معلومه یا x86 (32 بیت) هستش یا x86_64 (64 بیت) (من که میدونم تا قبل از اینکه اینو بگم فکر میکردید ARM و PowerPC هستش ولی نمیتونم ثابت کنم: ) و اینم خلاصه ی ماجرا اما خب مبحث اصلی ما این نیست, مبحث اصلی ما معماری ها هستن که تا الان چهار تاشون رو لو دادم (x86, x86_64, ARM, و PowerPC) خب, اول میریم سراغ اینکه اصلا معماری چیه, بعدش میریم سراغ معرفی معماری ها از اول تا همین الان! 1- معماری پردازنده های مرکزی و گرافیکی چیه؟ خب, ببینید, دوستان شما فرض کنید شما که ایرانی هستی, آیا من با شما انگلیسی صحبت میکنم؟ یا فرانسوی؟ من با شما دارم فارسی حرف میزنم ولی با کسی که آلمانی باشه, انگلیسی یا روسی حرف نمیزنم یا حتی فارسی من با شما آلمانی حرف میزنم حالا دقیقا برای پردازنده ها و کارت ای گرافیک هم همینه پردازنده شما که Smart CPU نیستش بیاد خودش بفهمه از چشماتون که الان چی میخواید بگید یک سری کد های عجیب غریب, که اصطلاحا بهشون میگیم کد اسمبلی, باید بنویسیم حالا زبان پردازنده های مرکزی و گرافیکی زبون بسته, معماری ها هستن معماری ها مثل x86, x86_64, ARM, ARM64, RISC-V, Motorola 6800, PowerPC و... هستن خیلی زیادن, معماری های پردازنده مرکزی از سال 1971 و اولین بار توسط شرکت اینتل ساخته شد از اون سال تا کنون, 150~ تا معماری وجود داره و برای پردازنده های گرافیکی از سال 1996 شروع شد و اولین معماری 3dfx Voodoo بودش و تا کنون نزدیک 100~ معماری برای پردازنده های گرافیکی وجود داره حتی براتون مثال هم میتونم بزنم (البته از ARM (NEON), x86, x86_64 و RISC-V, چون من فقط همین 4 تارو دست و پا شکته کار میکنم (صد البته که برای لینوکس هستن)): این کد هایی که میدم برای لینوکس هستن حواستون باشه فقط! x86 - Linux .section .data msg: .ascii "Hello!\n" len = . - msg .section .text .globl _start _start: movl $4, %eax # syscall: write movl $1, %ebx # fd: stdout movl $msg, %ecx # buffer movl $len, %edx # length int $0x80 movl $1, %eax # syscall: exit xorl %ebx, %ebx # status: 0 int $0x80 x86_64 - Linux .section .data msg: .ascii "Hello!\n" len = . - msg .section .text .globl _start _start: movq $1, %rax # syscall: write movq $1, %rdi # fd: stdout leaq msg(%rip), %rsi # buffer movq $len, %rdx # length syscall movq $60, %rax # syscall: exit xorq %rdi, %rdi # status: 0 syscall ARM - NEON - Linux .section .data msg: .ascii "Hello!\n" len = . - msg .section .text .globl _start _start: mov r7, #4 # syscall: write mov r0, #1 # fd: stdout ldr r1, =msg # buffer ldr r2, =len # length svc #0 mov r7, #1 # syscall: exit mov r0, #0 # status: 0 svc #0 ARM64 - NEON - Linux .section .data msg: .ascii "Hello!\n" len = . - msg .section .text .globl _start _start: mov x16, #64 # syscall: write mov x0, #1 # fd: stdout ldr x1, =msg # buffer ldr x2, =len # length svc #0 mov x16, #93 # syscall: exit mov x0, #0 # status: 0 svc #0 RISC-V - Linux .section .data msg: .ascii "Hello!\n" len = . - msg .section .text .globl _start _start: li a7, 64 # syscall: write li a0, 1 # fd: stdout la a1, msg # buffer li a2, 6 # length ecall li a7, 93 # syscall: exit li a0, 0 # status: 0 ecall و حالا اگر لینوکس باشید, با دستور زیر میتونید اجراش کنید: # x86 as -32 hello.s -o hello.o ld -m elf_i386 hello.o -o hello ./hello # x86_64 as hello.s -o hello.o ld hello.o -o hello ./hello # ARM as -32 hello.s -o hello.o ld -m elf32larm hello.o -o hello ./hello # ARM64 as hello.s -o hello.o ld hello.o -o hello ./hello # RISC-V as -march=rv64gc hello.s -o hello.o ld -m elf64lriscv hello.o -o hello ./hello ولی خب دوستان ببینید, هرکدوم از اینا یک سری نام های مشابه هم دارن که حالا در پایین بهتون گفتم: x86 (32-bit) -> i386, i486, ,i586 i686, x86 رایج ترین نام مشابه: i386 x86-64 (64-bit) -> x86_64, x64, amd64 رایج ترین نام مشابه: amd64 (ببینید, یه توضیح مختصر بدم, i386 تا i686 متعلق به اینتل هستش, و x64 هم همینطور, ولی وقتی AMD وارد بازی پردازنده ها شد و amd64 رو ساخت, اومدن برای اینکه دعوای مالکیتی نشه بین این دو شرکت غول, اومدن اسم های x86 و x86_64 رو انتخاب کردن که شامله اینتل و AMD میشد) ARM (32-bit) -> arm, armv7, armhf, armv7l رایج ترین نام مشابه: arm ARM64 (64-bit) -> aarch64, arm64 رایج ترین نام مشابه: aarch64 RISC-V (32-bit) -> rv32, rv32gc, riscv32 رایج ترین نام مشابه: riscv32 RISC-V (64-bit) -> rv64, rv64gc, riscv64 رایج ترین نام مشابه: riscv64 PowerPC (32-bit) -> ppc, powerpc رایج ترین نام مشابه: powerpc PowerPC (64-bit) -> ppc64, ppc64le رایج ترین نام مشابه: ppc64 و اینم از پردازنده های مرکزی اما خب پردازنده های گرافیکی خیلی جذاب تر هستن یکمی پردازنده های گرافیکی فرق دارن با پردازنده های مرکزی شما باید برای پردازنده های مرکزی API های متفاوتی برای هر نسخه بنویسید اما در کارت های گرافیک, به این شکل هستش که یه زبانی رو, مثل CUDA برای NVIDIA (غول کارت های گرافیک), ROCm برای AMD (جدید ولی طلایی), oneAPI بر پایه ی استاندارد SYCL (سیکل) و DPC++ (دی پی سی پلاس پلاس) (نسخه ی Intel عه SYCL) برای شرکت Intel (قدیمی ولی طلایی) (البته جدیدا oneAPI برای NVIDIA و AMD هم اومده), و یا Metal برای کارت های گرافیک Apple میدن و شما میتونید کارهارو با اونا پیش ببرید البته, پروژه های جاه طلبانه و موفقی هم وجود داشتن برای ارایه ی یک API واحد ه وقتی بیلد بگیریشون, خودشون برای هر پلتفرم خودشون رو سینک میکنن مثل HIP برای ROCm و CUDA, یا OpenCL و Vulkan Compute برای تمام کارت های گرافیک! برخلاف HIP که بیلد میگیره به CUDA و ROCm, زبان ها یا فریم ورک های OpenCL و Vulkan در خود کارت گرافیک هستن (نه در خود, بلکه از طریق درایور مستقیما با کارت گرافیک حرف میزنن) و مستقیم میتونید با کارت گرافیک صحبت کنید! البته!!! تا الان ما در رابطه با API های محاسباتی داریم حرف میزنیم, که همون شامله CUDA, OpenCL, ROCm, Vulkan Compute و... میشه البته, مثال رو هم یادم نرفته ها ولی خب اینبار کمتر از مثال های پردازنده هستش, چون من CUDA/ROCm + HIP و OpenCL رو بلدم توی اینجا متاسفانه اونم دست و پا شکسته حالا البته!! مورد اصلیتر اینه که API های HIP و ROCm دقیقا یکیه (نه اینکه حتی یه زره فرق کنه, دقیقا یکیه) چون دو تاشونم AMD ساخته ول با این تفاوت که ROCm فقط روی AMD اجرا میشه ولی HIP روی هم AMD هم NVIDIA NVIDIA - CUDA #include <cuda_runtime.h> #include <math.h> __global__ void javadTestMathKernelForArsaCmt(float* input, float* output, int n) { int idx = blockIdx.x * blockDim.x + threadIdx.x; if (idx >= n) return; float x = input[idx]; float result = 0.0f; result += sqrtf(fabsf(x)); result += powf(fabsf(x), 2.0f); result += powf(x, 3.0f); result += sinf(x) + cosf(x) + tanf(x); result += asinf(x / 10.0f) + acosf(x / 10.0f); result += sinhf(x) + coshf(x) + tanhf(x); result += logf(fabsf(x) + 1.0f); result += log10f(fabsf(x) + 1.0f); result += log2f(fabsf(x) + 1.0f); result += expf(x / 10.0f); result += sqrtf(x * x + 1.0f); result += cbrtf(x); result += ceilf(x) + floorf(x); result += erfcf(x) + erff(x); result += tgammaf(x + 2.0f); result += lgammaf(x + 2.0f); output[idx] = result; } int main() { const int N = 1024 * 1024 * 256; // 256M عنصر float *d_input, *d_output; cudaMalloc(&d_input, N * sizeof(float)); cudaMalloc(&d_output, N * sizeof(float)); javadTestMathKernelForArsaCmt<<<16384, 1024>>>(d_input, d_output, N); cudaDeviceSynchronize(); cudaFree(d_input); cudaFree(d_output); return 0; } AMD/NVIDIA - ROCm/HIP #include <hip/hip_runtime.h> #include <math.h> __global__ void javadTestMathKernelForArsaCmt(float* input, float* output, int n) { int idx = blockIdx.x * blockDim.x + threadIdx.x; if (idx >= n) return; float x = input[idx]; float result = 0.0f; result += sqrtf(fabsf(x)); result += powf(fabsf(x), 2.0f); result += powf(x, 3.0f); result += sinf(x) + cosf(x) + tanf(x); result += asinf(x / 10.0f) + acosf(x / 10.0f); result += sinhf(x) + coshf(x) + tanhf(x); result += logf(fabsf(x) + 1.0f); result += log10f(fabsf(x) + 1.0f); result += log2f(fabsf(x) + 1.0f); result += expf(x / 10.0f); result += sqrtf(x * x + 1.0f); result += cbrtf(x); result += ceilf(x) + floorf(x); result += erfcf(x) + erff(x); result += tgammaf(x + 2.0f); result += lgammaf(x + 2.0f); output[idx] = result; } int main() { const int N = 1024 * 1024 * 256; float *d_input, *d_output; hipMalloc(&d_input, N * sizeof(float)); hipMalloc(&d_output, N * sizeof(float)); hipLaunchKernelGGL(javadTestMathKernelForArsaCmt, dim3(16384), dim3(1024), 0, 0, d_input, d_output, N); hipDeviceSynchronize(); hipFree(d_input); hipFree(d_output); return 0; } OpenCL - All GPUs __kernel void javadTestMathKernelForArsaCmt(__global const float* input, __global float* output, int n) { int idx = get_global_id(0); if (idx >= n) return; float x = input[idx]; float result = 0.0f; result += sqrt(fabs(x)); result += pow(fabs(x), 2.0f); result += pow(x, 3.0f); result += sin(x) + cos(x) + tan(x); result += asin(x / 10.0f) + acos(x / 10.0f); result += sinh(x) + cosh(x) + tanh(x); result += log(fabs(x) + 1.0f); result += log10(fabs(x) + 1.0f); result += log2(fabs(x) + 1.0f); result += exp(x / 10.0f); result += sqrt(x * x + 1.0f); result += cbrt(x); result += ceil(x) + floor(x); result += erf(x) + erfc(x); result += tgamma(x + 2.0f); result += lgamma(x + 2.0f); output[idx] = result; } و اینم شد از داستان معماری ها امیدوارم لذت برده باشید, مشتاق نظرات, انتقادات, پیشنهادات و واکنش های شما هستیم امیدوارم شب و روز برهمتون خوش باشه, خدانگهدارتون! 1 1 Just Programming لینک به دیدگاه https://forum.arsacia.ir/topic/111550-all-cpu-gpu-architectures/ به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری...
Carl ارسال شده در April 8 اشتراک گذاری ارسال شده در April 8 البته اسمبلر یه زبان برنامه نویسی هم هست فقط اینکه.... منطق اسمبلر : کاربر: خب 2 + 2 اسمبلر : ها؟ کاربر: 2 + 2 اسمبلر : ها؟ کاربر : میگم 2 + 2 اسمبلر : هااا؟ خلاصه دسترسي به عمق سیستم ۱۰۰ ولی فهم و شعور ۰ .همون C رو ترجیح میدم😂 .Ah shit, here we go again لینک به دیدگاه https://forum.arsacia.ir/topic/111550-all-cpu-gpu-architectures/#findComment-1165165 به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری...
Integer ارسال شده در April 8 سازنده اشتراک گذاری ارسال شده در April 8 5 ساعت قبل، Carl گفته است: البته اسمبلر یه زبان برنامه نویسی هم هست فقط اینکه.... منطق اسمبلر : کاربر: خب 2 + 2 اسمبلر : ها؟ کاربر: 2 + 2 اسمبلر : ها؟ کاربر : میگم 2 + 2 اسمبلر : هااا؟ خلاصه دسترسي به عمق سیستم ۱۰۰ ولی فهم و شعور ۰ .همون C رو ترجیح میدم😂 😂😂 C + C++ ON Top ( We never forget Dlang :)) Just Programming لینک به دیدگاه https://forum.arsacia.ir/topic/111550-all-cpu-gpu-architectures/#findComment-1165729 به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری...
MohammadAli ارسال شده در April 9 اشتراک گذاری ارسال شده در April 9 احیاناً اون تب beta_qa پروژه ما نیست؟ 😂😂 The only things making you unhappy are your own thoughts لینک به دیدگاه https://forum.arsacia.ir/topic/111550-all-cpu-gpu-architectures/#findComment-1167369 به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری...
Integer ارسال شده در April 9 سازنده اشتراک گذاری ارسال شده در April 9 (ویرایش شده) 2 دقیقه قبل، MohammadAli گفته است: احیاناً اون تب beta_qa پروژه ما نیست؟ 😂😂 آره اتفاقا 😂❤️ دیگه PATH اش خیلی طولانی بود گفتم همینطوری عکس بگیرم حوصلم نگرفت دوباره بازش کنم 😂 ویرایش شده April 9 توسط Integer Just Programming لینک به دیدگاه https://forum.arsacia.ir/topic/111550-all-cpu-gpu-architectures/#findComment-1167373 به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری...
Executive ارسال شده در April 18 اشتراک گذاری ارسال شده در April 18 موفق باشی به اونجا که میخوایم میرسیم ما تو اوجه جونی بی حسیم گوره بابا فردایی که نرسید لینک به دیدگاه https://forum.arsacia.ir/topic/111550-all-cpu-gpu-architectures/#findComment-1183689 به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری...
Integer ارسال شده در April 18 سازنده اشتراک گذاری ارسال شده در April 18 9 ساعت قبل، Executive گفته است: موفق باشی ممنون ❤️ Just Programming لینک به دیدگاه https://forum.arsacia.ir/topic/111550-all-cpu-gpu-architectures/#findComment-1184494 به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری...
Masmoom ارسال شده در April 23 اشتراک گذاری ارسال شده در April 23 جالبه موفق باشی گلم+ لینک به دیدگاه https://forum.arsacia.ir/topic/111550-all-cpu-gpu-architectures/#findComment-1192874 به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری...
Integer ارسال شده در April 23 سازنده اشتراک گذاری ارسال شده در April 23 7 دقیقه قبل، Masmoom گفته است: جالبه موفق باشی گلم+ ممنونم ❤️ Just Programming لینک به دیدگاه https://forum.arsacia.ir/topic/111550-all-cpu-gpu-architectures/#findComment-1192886 به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری...
EzraeeI ارسال شده در April 24 اشتراک گذاری ارسال شده در April 24 عالی بود جواد جان خسته نباشی همین ادامه بده من از نزدیک پشتتم😂😂💙 وقتی میرسی به قدرت و اون بالا ها میشینی مراقب رفتارت با آدما باش یه روزی برمیگردی پایین همون ادم هارو میبینی My BORO: لینک به دیدگاه https://forum.arsacia.ir/topic/111550-all-cpu-gpu-architectures/#findComment-1194648 به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری...
Integer ارسال شده در April 24 سازنده اشتراک گذاری ارسال شده در April 24 1 ساعت قبل، EzraeeI گفته است: عالی بود جواد جان خسته نباشی همین ادامه بده من از نزدیک پشتتم😂😂💙 د آخه مشتی 😂 Just Programming لینک به دیدگاه https://forum.arsacia.ir/topic/111550-all-cpu-gpu-architectures/#findComment-1194807 به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری...
EzraeeI ارسال شده در April 29 اشتراک گذاری ارسال شده در April 29 هم جامع هم کامل لایک وقتی میرسی به قدرت و اون بالا ها میشینی مراقب رفتارت با آدما باش یه روزی برمیگردی پایین همون ادم هارو میبینی My BORO: لینک به دیدگاه https://forum.arsacia.ir/topic/111550-all-cpu-gpu-architectures/#findComment-1203667 به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری...
ارسالهای توصیه شده
برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید
برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید
ایجاد یک حساب کاربری
برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است!
ثبت نام یک حساب کاربری جدیدورود به حساب کاربری
دارای حساب کاربری هستید؟ از اینجا وارد شوید
ورود به حساب کاربری