ඔවුන් ලිනක්ස් කර්නලයට memchr මෙන් 4 ගුණයක් වේගවත් ක්‍රියාත්මක කිරීමක් ඇතුළත් කිරීමට යෝජනා කළහ.

මෑතකදී Linux කර්නලය සඳහා යෝජනාවක් නිකුත් කරන ලදී, a සමඟ පැච් කට්ටලයක් ඇතුළත් කිරීමට යෝජනා කර ඇත memchr() ශ්‍රිතය ප්‍රශස්ත ලෙස ක්‍රියාත්මක කිරීම අරාවක අක්ෂරයක් සෙවීමට භාවිතා කරයි.

memchr() ශ්‍රිතය c හි පළමු අවස්ථාව සඳහා s මගින් පෙන්වා ඇති මතක ප්‍රදේශයේ ප්‍රමුඛ n බයිට් පරිලෝකනය කරයි. s මගින් පෙන්වා දෙන මතක ප්‍රදේශයේ c සහ bytes යන දෙකම අත්සන් නොකළ අක්ෂර ලෙස අර්ථ දැක්වේ.

යෝජනාව පොරොන්දු වෙනවා වේගවත් වෙන්න මතකයේ කොටසක් තුළ චරිතයක් ස්ථානගත කිරීමට. සංවර්ධක පරීක්ෂණ වලදී, විශාල සෙවීම් වලදී නව ක්‍රියාත්මක කිරීම හතර ගුණයකින් වේගවත් විය හැක

පෙර අනුවාදය මෙන් නොව, බයිට් බයිට් සැසඳීමක් භාවිතා කරන ලදී, යෝජිත ක්‍රියාත්මක කිරීම නිර්මාණය කර ඇත්තේ 64-bit සහ 32-bit CPU රෙජිස්ටර් වල පූර්ණ භාවිතය සලකා බැලීමෙනි. බයිට් වෙනුවට, සැසඳීම සිදු කරනු ලබන්නේ යන්ත්‍ර වචන භාවිතයෙන් වන අතර එමඟින් එකවර බයිට් 4ක්වත් සැසඳීමට ඉඩ සලසයි.

මෙම පැච් මාලාව "memchr()" ප්‍රශස්ත කර මැක්‍රෝ එකක් එක් කළේය
"memchr_inv()" එවිට ශ්‍රිත දෙකටම එය බිට්මාස්ක් ජනනය කිරීමට භාවිතා කළ හැක.

"memchr()" හි මුල් ක්‍රියාත්මක කිරීම බයිට් සංසන්දනය මත පදනම් වේ,
CPU හි 64 හෝ 32 bit රෙජිස්ටර් සම්පූර්ණයෙන්ම භාවිතා නොකරයි. අපි ක්‍රියාත්මක කරනවා a
අවම වශයෙන් බයිට් 4ක් සමාන කිරීමට හැකි වන පරිදි වචන මගින් සංසන්දනය කිරීම
කාලගුණය. ප්‍රශස්තිකරණය කළ memchr() මුල් එකට වඩා 4 ගුණයකින් වේගවත් වේ
දිගු දම්වැල් සඳහා. Linux Kernel හි, අපි string එකේ දිග සොයා ගනිමු
"memchr()" මගින් සොයන්නේ Drivers/misc/lkdtm/heap.c හි බයිට් 512 දක්වා වේ.

විශාල නූල් මත සොයන විට, නව අනුවාදය පැරණි එකට වඩා 4 ගුණයක් පමණ වේගවත් විය (උදාහරණයක් ලෙස, අක්ෂර 1000 ක නූල් සඳහා). කුඩා දාම සඳහා, නව ක්රියාත්මක කිරීමේ කාර්යක්ෂමතාවය එතරම් වැදගත් නොවේ, නමුත් එය තවමත් මුල් පිටපතට වඩා වැඩි ය.

නව යෝජනාවේ සිත්ගන්නා කරුණ නම් විශාල දම්වැල් වැඩිදියුණු කිරීමයි, එය කාලය සැලකිය යුතු ලෙස වැඩිදියුණු කරයි. ලිනක්ස් කර්නලයේ ඇති බව සඳහන් කිරීම වටී. memchr() හි සැකසූ නූල්වල ප්‍රමාණය බයිට් 512 දක්වා ළඟා වේ. අපගේ පරීක්ෂණ වලදී, සෙවුම් අක්ෂරය ඇති අවස්ථාවක, 512-byte තන්තු සඳහා කාර්ය සාධනය ලබා ගනී තන්තුව අවසානයේ එය 20% කි.

64-bit හෝ 32-bit CPU හි රෙජිස්ටර් සම්පූර්ණයෙන්ම භාවිතා නොකරන බයිට් අනුව සැසඳීමේ තාක්ෂණය සමඟ memchr() හි මුල් අනුවාදය ක්‍රියාත්මක කර ඇති බව සඳහන් කිරීම වටී.

CPU එකෙහි අක්ෂර 8ක් එකවර සැසඳිය හැකි වන පරිදි අපි සම්පූර්ණ වචන සංසන්දනය භාවිතා කරමු. මෙම කේතය ඩේවිඩ් ලයිට් ක්‍රියාත්මක කිරීම මත පදනම් වේ.

පළමු ගොනුවේ කාර්ය සාධනය මැනීමට අපි ගොනු දෙකක් සාදන්නෙමු සාමාන්‍යයෙන් ගමනාන්ත චරිතයට වඩා ඉදිරියෙන් අකුරු 10ක් අඩංගු වේ. දෙවන ගොනුවේ පෙර අක්ෂර 1000 ක් වත් අඩංගු වේ ඉලක්කගත චරිතය.

අපගේ "memchr()" ක්‍රියාත්මක කිරීම තරමක් වේ පළමු පරීක්ෂණයේදී වඩා හොඳ සහ මුල් පිටපතට වඩා 4 ගුණයක වේගවත් දෙවන පරීක්ෂණයේදී ක්රියාත්මක කිරීම.

5.18-bit සහ 32-bit ගෘහ නිර්මාණ ශිල්පය සඳහා නව "memchr()" ප්‍රභේදය සමඟ කර්නල් 64 පරීක්ෂාව කිසිදු ගැටළුවක් හෙළි නොකළේය.

p 8 (හෝ බිට් 4 ඉලක්ක මත 32) බයිට පෙළගස්වා නොමැති නම් කුමක් සිදුවේද? සියලුම ඉලක්ක නොබැඳි (කාර්යක්ෂම) පැටවීම් සඳහා සහය නොදක්වයි, හරිද?
 මම හිතන්නේ p 8 හෝ 4 බයිට් පෙළගස්වා නොමැති නම් එය ක්‍රියාත්මක වේ. අපි හිතමු තන්තුව බයිට් 10ක් කියලා. මෙහි for loop එක පළමු බයිට් 8 සොයනු ඇත. ගමනාන්ත අක්ෂරය අවසන් බයිට් 2 තුළ තිබේ නම්, ලූප සඳහා දෙවැන්න එය සොයා ගනී. එය 32-bit යන්ත්‍රවල ද මේ ආකාරයට ක්‍රියා කරයි.

සමස්ත කාර්ය සාධනය තවමත් ඇගයීමට ලක් කර නොමැත ප්‍රශස්ත "memchr()" ප්‍රභේදය භාවිතා කරන විට කර්නල් උප පද්ධතිවල, ක්‍රියාත්මක කිරීම ප්‍රතික්ෂේප කරන්නේද යන්න සාකච්ඡා කර නොමැත (memchr() ශ්‍රිත ඇමතුම 129 වතාවක් කර්නල් කේතයේ ධාවක සහ ගොනු පද්ධති ඇතුළුව සිදු වේ).

අවසානයේ ඔබ ඒ ගැන වැඩි විස්තර දැන ගැනීමට කැමති නම්, ඔබට විස්තර පරීක්ෂා කළ හැකිය පහත සබැඳියේ.


ලිපියේ අන්තර්ගතය අපගේ මූලධර්මවලට අනුකූල වේ කතුවැකි ආචාර ධර්ම. දෝෂයක් වාර්තා කිරීමට ක්ලික් කරන්න මෙන්න.

අදහස් පළ කිරීමට ප්රථම වන්න

ඔබේ අදහස තබන්න

ඔබේ ඊ-මේල් ලිපිනය පළ කරනු නොලැබේ. අවශ්ය ක්ෂේත්ර දක්වා ඇති ලකුණ *

*

*

  1. දත්ත සඳහා වගකිව යුතු: මිගෙල් ඇන්ජල් ගැටන්
  2. දත්තවල අරමුණ: SPAM පාලනය කිරීම, අදහස් කළමනාකරණය.
  3. නීත්‍යානුකූලභාවය: ඔබේ කැමැත්ත
  4. දත්ත සන්නිවේදනය: නෛතික බැඳීමකින් හැර දත්ත තෙවන පාර්ශවයකට සන්නිවේදනය නොකෙරේ.
  5. දත්ත ගබඩා කිරීම: ඔක්සෙන්ටස් නෙට්වර්ක්ස් (EU) විසින් සත්කාරකත්වය දක්වන දත්ත සමුදාය
  6. අයිතිවාසිකම්: ඕනෑම වේලාවක ඔබට ඔබේ තොරතුරු සීමා කිරීමට, නැවත ලබා ගැනීමට සහ මකා දැමීමට හැකිය.