নিচের প্রশ্নগুলোর , সম্পর্কিত তবে উত্তর বৃদ্ধ হয়েছেন, আর ব্যবহারকারীর কাছ থেকে মন্তব্য মার্ক Glisse প্রস্তাব দেওয়া এই সমস্যার যে পর্যাপ্তরূপে আলোচনা না করা যেতে পারে সি যেহেতু ++, 17 নতুন পন্থা আছে।
আমি সিমডির জন্য সঠিকভাবে কাজ করা সারিবদ্ধ করার চেষ্টা করছি, তখনও সমস্ত ডেটাতে অ্যাক্সেস রয়েছে।
ইন্টেল-এ, আমি যদি টাইপের একটি ভাসমান ভেক্টর তৈরি করি __m256এবং 8 এর ফ্যাক্টর দ্বারা আমার আকার হ্রাস করি তবে এটি আমাকে সারিবদ্ধ মেমরি দেয়।
যেমন std::vector<__m256> mvec_a((N*M)/8);
কিছুটা হ্যাকি পদ্ধতিতে, আমি ভেক্টর উপাদানগুলিতে ভাসমানের জন্য পয়েন্টারগুলি কাস্ট করতে পারি, যা আমাকে স্বতন্ত্র ভাসমানের মানগুলিতে অ্যাক্সেস করতে দেয়।
পরিবর্তে, আমি একটি পছন্দ করতে চাই std::vector<float>যা সঠিকভাবে প্রান্তিক করা আছে, এবং এভাবে __m256সেগফোল্টিং ছাড়াই এবং অন্যান্য সিমডি টাইপগুলিতে লোড করা যায় ।
আমি সারিবদ্ধ_লোক অনুসন্ধান করছি ।
এটি আমাকে সি-স্টাইলের অ্যারে দিতে পারে যা সঠিকভাবে প্রান্তিকিত:
auto align_sz = static_cast<std::size_t> (32);
float* marr_a = (float*)aligned_alloc(align_sz, N*M*sizeof(float));
তবে আমি কীভাবে এটি করতে পারি তা সম্পর্কে নিশ্চিত নই std::vector<float>। এর std::vector<float>মালিকানা দেওয়া marr_a সম্ভব বলে মনে হচ্ছে না ।
আমি কিছু পরামর্শ দেখেছি যে আমার একটি কাস্টম বরাদ্দকারী লিখতে হবে , তবে এটি অনেকটা কাজের মতো মনে হচ্ছে, এবং সম্ভবত আধুনিক সি ++ এর সাথে আরও ভাল উপায় আছে?
_mm256_loadu_ps(&vec[i])। (যদিও নোট ডিফল্ট টিউনিং বিকল্প সহ জিসিসি splits না নিশ্চিত-প্রান্তিককৃত 256-বিট লোড / দোকান vmovups XMM / vinsertf128 মধ্যে। তাই সেখানে হয় ব্যবহার করে একটি সুবিধা_mm256_loadওভারloaduআপনি যত্নশীল কিভাবে জিসিসি উপর আপনার কোড প্রনয়ন যদি কেউ ভুলে যায় ব্যবহার-mtune=...বা-march=বিকল্পগুলি))